﻿using Logger;
using System.Reflection;
using ClickLand.CorporacionPlaza.AccesoDato.Contratos;
using ClickLand.CorporacionPlaza.AccesoDato.Implementacion.NHibernateMySql;
using ClickLand.CorporacionPlaza.Comunes.Recursos;
using Logger;

namespace ClickLand.CorporacionPlaza.AccesoDato.Fabricas
{
    /// <summary> Fabrica para los comandos de nhibernate </summary>
    public class FabricaDaoNHibernateMySql:FabricaDao
    {
        #region Overrides of FabricaDao

        /// <summary> Metodo que obtiene la instancia del dao que opera la entidad prueba </summary>
        /// <return>IDaoPrueba implementado segun la fabrica seleccionada</return>
        public override IDaoPrueba ObtenerDaoPrueba()
        {
            #region Instrumentacion Entrada
            if (Log.InfoHabilitado)
                Log.Info(string.Format(Recurso.EntrandoMetodo,MethodBase.GetCurrentMethod().Name));
            #endregion
            var retorno = new DaoPruebaNHibernateMySql();
            #region Instrumentacion Salida
            if (Log.InfoHabilitado)
                Log.Info(string.Format(Recurso.SaliendoMetodo,MethodBase.GetCurrentMethod().Name));
            #endregion
            return retorno;
        }


        /// <summary> Metodo que obtiene la instancia del dao que opera la entidad cliente </summary>
        /// <return>IDaoCliente implementado segun la fabrica seleccionada</return>
        public override IDaoCliente ObtenerDaoCliente()
        {
            #region Instrumentacion Entrada
            if (Log.InfoHabilitado)
                Log.Info(string.Format(Recurso.EntrandoMetodo,MethodBase.GetCurrentMethod().Name));
            #endregion
            var retorno = new DaoClienteNHibernateMySql();
            #region Instrumentacion Salida
            if (Log.InfoHabilitado)
                Log.Info(string.Format(Recurso.SaliendoMetodo,MethodBase.GetCurrentMethod().Name));
            #endregion
            return retorno;
        }


        /// <summary> Metodo que obtiene la instancia del dao que opera la entidad Cannon </summary>
        /// <return>IDaCannon implementado segun la fabrica seleccionada</return>
        public override IDaoCannon ObtenerDaoCannon()
        {
            #region Instrumentacion Entrada
            if (Log.InfoHabilitado)
                Log.Info(string.Format(Recurso.EntrandoMetodo,MethodBase.GetCurrentMethod().Name));
            #endregion

            #region Instrumentacion Salida
            if (Log.InfoHabilitado)
                Log.Info(string.Format(Recurso.SaliendoMetodo,MethodBase.GetCurrentMethod().Name));
            #endregion
            return null;
        }


        /// <summary> Metodo que obtiene la instancia del dao que opera la entidad ContratoPension </summary>
        /// <return>IDaoContratoPension implementado segun la fabrica seleccionada</return>
        public override IDaoContratoPension ObtenerDaoContratoPension()
        {
            #region Instrumentacion Entrada
            if (Log.InfoHabilitado)
                Log.Info(string.Format(Recurso.EntrandoMetodo,MethodBase.GetCurrentMethod().Name));
            #endregion
            var retorno = new DaoContratoPensionNHibernateMySql();
            #region Instrumentacion Salida
            if (Log.InfoHabilitado)
                Log.Info(string.Format(Recurso.SaliendoMetodo,MethodBase.GetCurrentMethod().Name));
            #endregion

            return retorno;
        }


        /// <summary> Metodo que obtiene la instancia del dao que opera la entidad Establecimiento </summary>
        /// <return>IDaoEstablecimiento implementado segun la fabrica seleccionada</return>
        public override IDaoEstablecimiento ObtenerDaoEstablecimiento()
        {
            #region Instrumentacion Entrada
            if (Log.InfoHabilitado)
                Log.Info(string.Format(Recurso.EntrandoMetodo,MethodBase.GetCurrentMethod().Name));
            #endregion
            var retorno = new DaoEstablecimientoNHibernateMySql();
            #region Instrumentacion Salida
            if (Log.InfoHabilitado)
                Log.Info(string.Format(Recurso.SaliendoMetodo,MethodBase.GetCurrentMethod().Name));
            #endregion
            return retorno;
        }


        /// <summary> Metodo que obtiene la instancia del dao que opera la entidad Fiador </summary>
        /// <return>IDaoFiador implementado segun la fabrica seleccionada</return>
        public override IDaoFiador ObtenerDaoFiador()
        {
            #region Instrumentacion Entrada
            if (Log.InfoHabilitado)
                Log.Info(string.Format(Recurso.EntrandoMetodo,MethodBase.GetCurrentMethod().Name));
            #endregion
            var retorno = new DaoFiadorNHibernateMySql();
            #region Instrumentacion Salida
            if (Log.InfoHabilitado)
                Log.Info(string.Format(Recurso.SaliendoMetodo,MethodBase.GetCurrentMethod().Name));
            #endregion
            return retorno;
        }


        /// <summary> Metodo que obtiene la instancia del dao que opera la entidad Garantia </summary>
        /// <return>IDaoGarantia implementado segun la fabrica seleccionada</return>
        public override IDaoGarantia ObtenerDaoGaratia()
        {
            #region Instrumentacion Entrada
            if (Log.InfoHabilitado)
                Log.Info(string.Format(Recurso.EntrandoMetodo,MethodBase.GetCurrentMethod().Name));
            #endregion
            var retorno = new DaoGarantiaNHibernateMySql();
            #region Instrumentacion Salida
            if (Log.InfoHabilitado)
                Log.Info(string.Format(Recurso.SaliendoMetodo,MethodBase.GetCurrentMethod().Name));
            #endregion
            return retorno;
        }


        /// <summary> Metodo que obtiene la instancia del dao que opera la entidad Pension </summary>
        /// <return>IDaoPension implementado segun la fabrica seleccionada</return>
        public override IDaoPension ObtenerDaoPension()
        {
            #region Instrumentacion Entrada
            if (Log.InfoHabilitado)
                Log.Info(string.Format(Recurso.EntrandoMetodo,MethodBase.GetCurrentMethod().Name));
            #endregion
            var retorno = new DaoPensionNHibernateMySql();
            #region Instrumentacion Salida
            if (Log.InfoHabilitado)
                Log.Info(string.Format(Recurso.SaliendoMetodo,MethodBase.GetCurrentMethod().Name));
            #endregion
            return retorno;
        }


        /// <summary> Metodo que obtiene la instancia del dao que opera la entidad Poliza </summary>
        /// <return>IDaoPoliza implementado segun la fabrica seleccionada</return>
        public override IDaoPoliza ObtenerDaoPoliza()
        {
            #region Instrumentacion Entrada
            if (Log.InfoHabilitado)
                Log.Info(string.Format(Recurso.EntrandoMetodo,MethodBase.GetCurrentMethod().Name));
            #endregion
            var retorno = new DaoPolizaNHibernateMySql();
            #region Instrumentacion Salida
            if (Log.InfoHabilitado)
                Log.Info(string.Format(Recurso.SaliendoMetodo,MethodBase.GetCurrentMethod().Name));
            #endregion
            return retorno;
        }


        /// <summary> Metodo que obtiene la instancia del dao que opera la entidad TipoEstablecimiento </summary>
        /// <return>IDaoTipoEstablecimiento implementado segun la fabrica seleccionada</return>
        public override IDaoTipoEstablecimiento ObtenerDaoTipoEstablecimiento()
        {
            #region Instrumentacion Entrada
            if (Log.InfoHabilitado)
                Log.Info(string.Format(Recurso.EntrandoMetodo,MethodBase.GetCurrentMethod().Name));
            #endregion
            var retorno = new DaoTipoEstablecimientoNHibernateMySql();
            #region Instrumentacion Salida
            if (Log.InfoHabilitado)
                Log.Info(string.Format(Recurso.SaliendoMetodo,MethodBase.GetCurrentMethod().Name));
            #endregion
            return retorno;
        }


        /// <summary> Metodo que obtiene la instancia del dao que opera la entidad Contrato </summary>
        /// <return>IDaoContrato implementado segun la fabrica seleccionada</return>
        public override IDaoContrato ObtenerDaoContrato()
        {
            #region Instrumentacion Entrada
            if (Log.InfoHabilitado)
                Log.Info(string.Format(Recurso.EntrandoMetodo,MethodBase.GetCurrentMethod().Name));
            #endregion
            var retorno = new DaoContratoNHibernateMySql();
            #region Instrumentacion Salida
            if (Log.InfoHabilitado)
                Log.Info(string.Format(Recurso.SaliendoMetodo,MethodBase.GetCurrentMethod().Name));
            #endregion
            return retorno;
        }


        /// <summary> Metodo que obtiene la instancia del dao que opera la entidad Venta </summary>
        /// <return>IDaoVenta implementado segun la fabrica seleccionada</return>
        public override IDaoVenta ObtenerDaoVenta()
        {
            #region Instrumentacion Entrada
            if (Log.InfoHabilitado)
                Log.Info(string.Format(Recurso.EntrandoMetodo,MethodBase.GetCurrentMethod().Name));
            #endregion
            var retorno =  new DaoVentaNHibernateMySql();
            #region Instrumentacion Salida
            if (Log.InfoHabilitado)
                Log.Info(string.Format(Recurso.SaliendoMetodo,MethodBase.GetCurrentMethod().Name));
            #endregion
            return retorno;
        }


        /// <summary> Metodo que obtiene la instancia del dao que opera la entidad Venta </summary>
        /// <returns>IDaoVenta implementado segun la fabrica seleccionada</returns>
        public override IDaoProyeccion ObtenerDaoProyeccion()
        {

            #region Instrumentacion Entrada
            if (Log.InfoHabilitado)
                Log.Info(string.Format(Recurso.EntrandoMetodo, MethodBase.GetCurrentMethod().Name));
            #endregion
            var retorno = new DaoProyeccionNHibernateMySql();
            #region Instrumentacion Salida
            if (Log.InfoHabilitado)
                Log.Info(string.Format(Recurso.SaliendoMetodo, MethodBase.GetCurrentMethod().Name));
            #endregion
            return retorno;
        }

        #endregion
    }
}
